import pymysql
# db = pymysql.connect(host="121.41.51.49",user='root',password='Aa010903!',database="crmeb",cursorclass=pymysql.cursors.DictCursor)
# db就是创建的数据库对象
"""
host：要连接的数据库地址
user：要连接的账号
password：密码
database：要链接哪个数据库
cursorclass：设置返回的对象是字典
"""
# cursor = db.cursor() # 创建游标对象
"""
游标：
通过游标来执行sql，提交sql对象
可以把它理解为，linux里面敲完命令的回车；navicat里面敲完命令的鼠标左击执行
"""
#======================使用查询的sql=======================================

# 执行sql
# cursor.execute('select * from eb_user_group;')
# 返回全部的结果
# result = cursor.fetchall() # result就是返回值
# 返回符合查询条件的一条结果
# result = cursor.fetchone()
# print(result) # 打印所有的结果
# db.close() # 每一次执行完结果后，需要关闭数据库对象；如果不关闭的话，后面再执行操作可能就会出现错误
# ==================使用新增===================================
"""sql = "insert into eb_user_group values(5,'新增用户')"
cursor.execute(sql) # 执行sql
db.commit() # 对数据库发生了真实更改的、新增、删除的，都需要用到数据库对象来去提交
sql1 = 'select * from eb_user_group'
cursor.execute(sql1) # 使用查询，看刚才新增的数据有没有添加上
print(cursor.fetchall())  # 打印所有的查询结果。fetchall全部的结果
db.close() # 最后用完关闭数据库对象"""
# ================使用修改=============================
"""cursor.execute("update eb_user_group set group_name='新增用户_plus' where id=4")
db.commit() # 修改也是一样，要用数据库提交
cursor.execute('select * from eb_user_group  where id=4')
print(cursor.fetchone()) # 返回符合条件的一条数据
db.close()"""
# ===============使用删除=======================================
"""cursor.execute('delete from eb_user_group where id=4')
db.commit() # 使用数据库对象进行提交
cursor.execute('select * from eb_user_group where id=4')
print(cursor.fetchone()) # 删除数据以后，就会是None，为空
db.close() # 用完记得关闭掉数据库
"""
# 整合到一起，使用类来去封装
class DB:
    def __init__(self,host,user,password,databases,cursorclass):
        """
        :param host: 传入要连接的数据库ip地址
        :param user: 传入数据库名称
        :param password:  传入数据库密码
        :param cursorclass:  传入返回的类型
        """
        self.host = host
        self.user = user
        self.password = password
        self.cursorclass = cursorclass
        self.databases = databases

    def connect(self):
        """
        # 创建数据库对象：self.db
        # 创建游标对象：self.cursor()
        :return:
        """
        self.db = pymysql.connect(host=self.host,user = self.user,password=self.password,database=self.databases,cursorclass=self.cursorclass)
        self.cursor = self.db.cursor()
    def close(self):
        self.cursor.close() # 先关闭掉游标对象
        self.db.close() # 再去关闭掉数据库对象
    def SeachOne(self,sql):
        """
        :param sql: 输入你要执行的查询sql
        :return:
        """
        self.connect() # 做所有的操作之前，先去链接下数据库
        try:
            self.cursor.execute(sql) # 执行sql
            result = self.cursor.fetchone() # sql有数据库则返回
            self.close() # 关闭数据库
            return result # 返回执行结果
        except Exception as e: # 如果数据库异常
            self.db.rollback() # 如果出现了异常，数据库回滚！
            self.close() # 再关闭掉数据库
            print(f"查询数据库失败，请检查！异常错误为：{e}")
            return None  # result就是None，空的
    def SeachAll(self,sql):
        """
        :param sql: 输入你要执行的查询sql
         :return:
        """
        self.connect()  # 做所有的操作之前，先去链接下数据库
        try:
            self.cursor.execute(sql)  # 执行sql，返回全部的sql执行结果
            result = self.cursor.fetchall()  # sql有数据库则返回
            self.close()  # 关闭数据库
            return result  # 返回执行结果
        except Exception as e:  # 如果数据库异常
            self.db.rollback()  # 如果出现了异常，数据库回滚！
            self.close()  # 再关闭掉数据库
            print(f"查询数据库失败，请检查！异常错误为：{e}")
            return None  # result就是None，空的
    def __edit(self,sql): # 封装一个主函数
        self.connect() # 先去做链接
        try:
            self.cursor.execute(sql)
            self.db.commit() # 提交数据库本次的改动
            self.close()
            return 1
        except Exception as e:
            self.db.rollback()
            self.close()
            print(f"sql语句执行异常，请检查！异常错误为：{e}")
            return 0
    def insert(self,sql):
        self.__edit(sql)
    def update(self,sql):
        self.__edit(sql)
    def delete(self,sql):
        self.__edit(sql)


"""if __name__ == '__main__':
    # 通过DB类，创建了d1对象
    d1 = DB(host='121.41.51.49',user='root',password='Aa010903!',databases = 'crmeb',cursorclass=pymysql.cursors.DictCursor) # pymysql.cursors.DictCursor 设置返回值为字典对象
    # 查询数据库一条
    print(d1.SeachOne('select * from eb_user_group'))
    # 查询数据库多条
    print(d1.SeachAll('select * from eb_user_group'))
    # 修改数据
    d1.update('update eb_user_group set group_name="琳姐" where id=1')
    print(d1.SeachAll('select * from eb_user_group')) # 确认下有没有修改成功
    # 新增数据
    d1.insert('insert into eb_user_group values(6,"张三")')
    print(d1.SeachAll('select * from eb_user_group'))  # 确认下有没有新增成功
    # 删除数据
    d1.delete('delete from eb_user_group where id=6')
    print(d1.SeachAll('select * from eb_user_group'))  # 确认下有没有删除成功"""









































